package com.sky.entity;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 订单
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Orders implements Serializable {

    /**
     * 订单状态 1待付款 2待接单 3已接单 4派送中 5已完成 6已取消
     */
    public static final Integer PENDING_PAYMENT = 1;
    public static final Integer TO_BE_CONFIRMED = 2;
    public static final Integer CONFIRMED = 3;
    public static final Integer DELIVERY_IN_PROGRESS = 4;
    public static final Integer COMPLETED = 5;
    public static final Integer CANCELLED = 6;

    /**
     * 支付状态 0未支付 1已支付 2退款
     */
    public static final Integer UN_PAID = 0;
    public static final Integer PAID = 1;
    public static final Integer REFUND = 2;

    private static final long serialVersionUID = 1L;

    private Long id;

    //订单号
    private String number;

    //订单状态 1待付款 2待接单 3已接单 4派送中 5已完成 6已取消 7退款
    private Integer status;

    //下单用户id
    private Long userId;

    //地址id
    private Long addressBookId;

    //下单时间
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime orderTime;

    //结账时间
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime checkoutTime;

    //支付方式 1微信，2支付宝
    private Integer payMethod;

    //支付状态 0未支付 1已支付 2退款
    private Integer payStatus;

    //实收金额
    private BigDecimal amount;

    //备注
    private String remark;

    //用户名
    private String userName;

    //手机号
    private String phone;

    //地址
    private String address;

    //收货人
    private String consignee;

    //订单取消原因
    private String cancelReason;

    //订单拒绝原因
    private String rejectionReason;

    //订单取消时间
    private LocalDateTime cancelTime;

    //预计送达时间
//  todo  前端页面因日期格式不正确而完全不显示，通常是因为日期格式错误触发了 JavaScript 运行时异常，导致渲染流程被中断。即使只是日期格式有问题，若前端代码中存在对日期的处理逻辑（如格式化、转换等），错误可能会 “阻断” 整个组件的渲染。
    // TODO: 后端的日期格式返回给前端易为数组格式，容易造成前端接收数据格式不正确，导致无法正常显示
//    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
// @DateTimeFormat 注解的作用是 “解析前端传入的时间参数”，而非 “格式化后端返回给前端的时间数据”，所以这样改正也不正确
//当后端将 LocalDateTime 对象通过 JSON 序列化返回给前端时，默认使用的是 JSON 框架（如 Jackson）的内置规则。Jackson 对 LocalDateTime 的默认序列化方式就是转换为数组（格式：[年, 月, 日, 时, 分, 秒]）
//要让后端返回格式化的字符串时间（如 "2025-09-05 10:16:00"），需要使用 JSON 框架的格式化注解（如 Jackson 的 @JsonFormat），而非 @DateTimeFormat。
    // pattern：指定输出格式
    // timezone：指定时区（如 GMT+8 对应中国时区）
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime estimatedDeliveryTime;

    //配送状态  1立即送出  0选择具体时间
    private Integer deliveryStatus;

    //送达时间
    private LocalDateTime deliveryTime;

    //打包费
    private int packAmount;

    //餐具数量
    private int tablewareNumber;

    //餐具数量状态  1按餐量提供  0选择具体数量
    private Integer tablewareStatus;
}
